package proyecto.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.EspacioComun;
import proyecto.modelo.enumeracion.EspacioComunEstado;
import proyecto.util.ConexionBD;

public class EspacioComunDAO extends BaseDAO {

	public int insertar(EspacioComun vo) throws DAOExcepcion {
		System.out.println("EspacioComunDAO: insertar(EspacioComun vo)");
		String query = "INSERT INTO propiedad(idBloque, nombre, descricpcion, capacidad, estado, tipoPropiedad) VALUES (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		int idp = 0;
		try {

			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdBloque());
			stmt.setString(2, vo.getNombre());
			stmt.setString(3, vo.getDescripcion());
			stmt.setInt(4, vo.getCapacidad());
			stmt.setInt(5, vo.getEstado().value());
			stmt.setInt(6, vo.getTipoVivienda());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			query = "SELECT LAST_INSERT_ID()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				idp = rs.getInt(1);
			}
			vo.setIdPropiedad(idp);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return idp;
	}

	public void update(EspacioComun vo) throws DAOExcepcion {
		System.out.println("EspacioComunDAO: update(EspacioComun vo)");
		String query = "UPDATE propiedad SET idBloque = ?, nombre = ?, descricpcion = ?, capacidad = ?, estado = ?, tipoPropiedad = ? WHERE idPropiedad = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {

			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdBloque());
			stmt.setString(2, vo.getNombre());
			stmt.setString(3, vo.getDescripcion());
			stmt.setInt(4, vo.getCapacidad());
			stmt.setInt(5, vo.getEstado().value());
			stmt.setInt(6, vo.getTipoVivienda());
			stmt.setInt(7, vo.getIdPropiedad());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public void eliminar(int id) throws DAOExcepcion {
		System.out.println("EspacioComunDAO: eliminar(int id)");
		String query = "DELETE FROM propiedad WHERE idPropiedad=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, String.valueOf(id));
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<EspacioComun> listar() throws DAOExcepcion {
		System.out.println("EspacioComunDAO: listar()");
		Collection<EspacioComun> c = new ArrayList<EspacioComun>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT idPropiedad,idBloque,nombre,descricpcion,capacidad,estado,tipoPropiedad from propiedad where tipoPropiedad = 2";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				EspacioComun vo = new EspacioComun();
				vo.setIdPropiedad(Integer.parseInt(rs.getString("idPropiedad")));
				vo.setIdBloque(Integer.parseInt(rs.getString("idBloque")));
				vo.setNombre(rs.getString("nombre"));
				vo.setDescripcion(rs.getString("descricpcion"));
				vo.setEstado(EspacioComunEstado.lookup(Integer.parseInt(rs.getString("estado"))));
				vo.setTipoVivienda(rs.getInt("tipoPropiedad"));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

}
